import GObject from 'gi://GObject';
import Gtk from 'gi://Gtk?version=4.0';
-const ExtensionUtils = imports.misc.extensionUtils;
-
export const ExtensionPrefsDialog = GObject.registerClass({
GTypeName: 'ExtensionPrefsDialog',
}, class ExtensionPrefsDialog extends Adw.PreferencesWindow {
}
async _loadPrefs() {
- // give extension prefs access to their own extension object
- ExtensionUtils.setCurrentExtension(this._extension);
-
const {dir, metadata} = this._extension;
const prefsJs = dir.get_child('prefs.js');
import {ServiceImplementation} from './dbusService.js';
const {deserializeExtension} = imports.misc.extensionUtils;
+const {setExtensionManager} = imports.misc.extensionUtils;
const {loadInterfaceXML} = imports.misc.dbusUtils;
const ExtensionsIface = loadInterfaceXML('org.gnome.Shell.Extensions');
}
const extensionManager = new ExtensionManager();
+setExtensionManager(extensionManager);
export const ExtensionsService = class extends ServiceImplementation {
constructor() {
/* exported ExtensionState, ExtensionType, getCurrentExtension,
getSettings, initTranslations, gettext, ngettext, pgettext,
openPrefs, isOutOfDate, serializeExtension,
- deserializeExtension, setCurrentExtension */
+ deserializeExtension, setExtensionManager */
// Common utils for the extension system and the extension
// preferences tool
const Config = imports.misc.config;
-let Main = null;
-
-try {
- Main = imports.ui.main;
-} catch (error) {
- // Only log the error if it is not due to the
- // missing import.
- if (error?.name !== 'ImportError')
- console.error(error);
-}
-
-let _extension = null;
+let _extensionManager = null;
var ExtensionType = {
SYSTEM: 1,
];
/**
- * @param {object} extension the extension object to use in utilities like `initTranslations()`
+ * @param {object} extensionManager to use in utilities like `initTranslations()`
*/
-function setCurrentExtension(extension) {
- if (Main)
- throw new Error('setCurrentExtension() can only be called from outside the shell');
+function setExtensionManager(extensionManager) {
+ if (_extensionManager)
+ throw new Error('Trying to override existing extension manager');
- _extension = extension;
+ _extensionManager = extensionManager;
}
/**
* an extension.
*/
function getCurrentExtension() {
- if (_extension)
- return _extension;
-
const basePath = '/gnome-shell/extensions/';
// Search for an occurrence of an extension stack frame
return null;
// local import, as the module is used from outside the gnome-shell process
- // as well (not this function though)
- let extensionManager = imports.ui.main.extensionManager;
+ // as well
+ if (!_extensionManager)
+ setExtensionManager(imports.ui.main.extensionManager);
// The exact stack line differs depending on where the function
// was called (function or module scope), and whether it's called
path = GLib.path_get_dirname(path);
const dirName = GLib.path_get_basename(path);
- const extension = extensionManager.lookup(dirName);
+ const extension = _extensionManager.lookup(dirName);
if (extension !== undefined)
return extension;
} while (path !== '/');